STM32F40xx搭建Keil工程编译错误(stm32f4xx_fmc.c以及stm32f4xx_fsmc.c)

2024年10月30日 作者头像 作者头像 Mochizuki 编辑

状况

搭建完Keil工程后进行编译后发生如下的错误

compiling stm32f4xx_fmc.c...
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(144): error:  #20: identifier "FMC_Bank1" is undefined
      FMC_Bank1->BTCR[FMC_Bank] = 0x000030DB;    
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(149): error:  #20: identifier "FMC_Bank1" is undefined
      FMC_Bank1->BTCR[FMC_Bank] = 0x000030D2; 
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(151): error:  #20: identifier "FMC_Bank1" is undefined
    FMC_Bank1->BTCR[FMC_Bank + 1] = 0x0FFFFFFF;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(152): error:  #20: identifier "FMC_Bank1E" is undefined
    FMC_Bank1E->BWTR[FMC_Bank] = 0x0FFFFFFF;  
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(191): error:  #20: identifier "FMC_Bank1" is undefined
    tmpbcr = FMC_Bank1->BTCR[FMC_NORSRAMInitStruct->FMC_Bank];
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(195): error:  #20: identifier "FMC_BCR1_MBKEN" is undefined
    tmpbcr &= ((uint32_t)~(FMC_BCR1_MBKEN   | FMC_BCR1_MUXEN    | FMC_BCR1_MTYP     | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(195): error:  #20: identifier "FMC_BCR1_MUXEN" is undefined
    tmpbcr &= ((uint32_t)~(FMC_BCR1_MBKEN   | FMC_BCR1_MUXEN    | FMC_BCR1_MTYP     | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(195): error:  #20: identifier "FMC_BCR1_MTYP" is undefined
    tmpbcr &= ((uint32_t)~(FMC_BCR1_MBKEN   | FMC_BCR1_MUXEN    | FMC_BCR1_MTYP     | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(196): error:  #20: identifier "FMC_BCR1_MWID" is undefined
                           FMC_BCR1_MWID     | FMC_BCR1_FACCEN   | FMC_BCR1_BURSTEN  | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(196): error:  #20: identifier "FMC_BCR1_FACCEN" is undefined
                           FMC_BCR1_MWID     | FMC_BCR1_FACCEN   | FMC_BCR1_BURSTEN  | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(196): error:  #20: identifier "FMC_BCR1_BURSTEN" is undefined
                           FMC_BCR1_MWID     | FMC_BCR1_FACCEN   | FMC_BCR1_BURSTEN  | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(197): error:  #20: identifier "FMC_BCR1_WAITPOL" is undefined
                           FMC_BCR1_WAITPOL  | FMC_BCR1_WRAPMOD  | FMC_BCR1_WAITCFG  | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(197): error:  #20: identifier "FMC_BCR1_WRAPMOD" is undefined
                           FMC_BCR1_WAITPOL  | FMC_BCR1_WRAPMOD  | FMC_BCR1_WAITCFG  | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(197): error:  #20: identifier "FMC_BCR1_WAITCFG" is undefined
                           FMC_BCR1_WAITPOL  | FMC_BCR1_WRAPMOD  | FMC_BCR1_WAITCFG  | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(198): error:  #20: identifier "FMC_BCR1_WREN" is undefined
                           FMC_BCR1_WREN     | FMC_BCR1_WAITEN   | FMC_BCR1_EXTMOD   | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(198): error:  #20: identifier "FMC_BCR1_WAITEN" is undefined
                           FMC_BCR1_WREN     | FMC_BCR1_WAITEN   | FMC_BCR1_EXTMOD   | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(198): error:  #20: identifier "FMC_BCR1_EXTMOD" is undefined
                           FMC_BCR1_WREN     | FMC_BCR1_WAITEN   | FMC_BCR1_EXTMOD   | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(199): error:  #20: identifier "FMC_BCR1_ASYNCWAIT" is undefined
                           FMC_BCR1_ASYNCWAIT| FMC_BCR1_CBURSTRW | FMC_BCR1_CCLKEN));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(199): error:  #20: identifier "FMC_BCR1_CBURSTRW" is undefined
                           FMC_BCR1_ASYNCWAIT| FMC_BCR1_CBURSTRW | FMC_BCR1_CCLKEN));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(199): error:  #20: identifier "FMC_BCR1_CCLKEN" is undefined
                           FMC_BCR1_ASYNCWAIT| FMC_BCR1_CBURSTRW | FMC_BCR1_CCLKEN));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(253): error:  #20: identifier "FMC_Bank1E" is undefined
      tmpbwr = FMC_Bank1E->BWTR[FMC_NORSRAMInitStruct->FMC_Bank];
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(256): error:  #20: identifier "FMC_BWTR1_ADDSET" is undefined
      tmpbwr &= ((uint32_t)~(FMC_BWTR1_ADDSET  | FMC_BWTR1_ADDHLD | FMC_BWTR1_DATAST | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(256): error:  #20: identifier "FMC_BWTR1_ADDHLD" is undefined
      tmpbwr &= ((uint32_t)~(FMC_BWTR1_ADDSET  | FMC_BWTR1_ADDHLD | FMC_BWTR1_DATAST | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(256): error:  #20: identifier "FMC_BWTR1_DATAST" is undefined
      tmpbwr &= ((uint32_t)~(FMC_BWTR1_ADDSET  | FMC_BWTR1_ADDHLD | FMC_BWTR1_DATAST | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(257): error:  #20: identifier "FMC_BWTR1_BUSTURN" is undefined
                             FMC_BWTR1_BUSTURN | FMC_BWTR1_ACCMOD));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(257): error:  #20: identifier "FMC_BWTR1_ACCMOD" is undefined
                             FMC_BWTR1_BUSTURN | FMC_BWTR1_ACCMOD));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(269): error:  #20: identifier "FMC_Bank1E" is undefined
      FMC_Bank1E->BWTR[FMC_NORSRAMInitStruct->FMC_Bank] = 0x0FFFFFFF;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(321): error:  #20: identifier "FMC_Bank1" is undefined
      FMC_Bank1->BTCR[FMC_Bank] |= BCR_MBKEN_SET;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(326): error:  #20: identifier "FMC_Bank1" is undefined
      FMC_Bank1->BTCR[FMC_Bank] &= BCR_MBKEN_RESET;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(394): error:  #20: identifier "FMC_Bank2" is undefined
      FMC_Bank2->PCR2 = 0x00000018;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c: 0 warnings, 30 errors
compiling stm32f4xx_fsmc.c...

..\Lib\src\stm32f4xx_fsmc.c(129): error:  #20: identifier "FSMC_Bank1" is undefined
      FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030DB;   
..\Lib\src\stm32f4xx_fsmc.c(134): error:  #20: identifier "FSMC_Bank1" is undefined
      FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030D2;
..\Lib\src\stm32f4xx_fsmc.c(136): error:  #20: identifier "FSMC_Bank1" is undefined
    FSMC_Bank1->BTCR[FSMC_Bank + 1] = 0x0FFFFFFF;
..\Lib\src\stm32f4xx_fsmc.c(137): error:  #20: identifier "FSMC_Bank1E" is undefined
    FSMC_Bank1E->BWTR[FSMC_Bank] = 0x0FFFFFFF;  
..\Lib\src\stm32f4xx_fsmc.c(173): error:  #20: identifier "FSMC_Bank1" is undefined
    FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] =
..\Lib\src\stm32f4xx_fsmc.c(210): error:  #20: identifier "FSMC_Bank1E" is undefined
      FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] =
..\Lib\src\stm32f4xx_fsmc.c(220): error:  #20: identifier "FSMC_Bank1E" is undefined
      FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] = 0x0FFFFFFF;
..\Lib\src\stm32f4xx_fsmc.c(281): error:  #20: identifier "FSMC_Bank1" is undefined
      FSMC_Bank1->BTCR[FSMC_Bank] |= BCR_MBKEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(286): error:  #20: identifier "FSMC_Bank1" is undefined
      FSMC_Bank1->BTCR[FSMC_Bank] &= BCR_MBKEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(354): error:  #20: identifier "FSMC_Bank2" is undefined
      FSMC_Bank2->PCR2 = 0x00000018;
..\Lib\src\stm32f4xx_fsmc.c(363): error:  #20: identifier "FSMC_Bank3" is undefined
      FSMC_Bank3->PCR3 = 0x00000018;
..\Lib\src\stm32f4xx_fsmc.c(422): error:  #20: identifier "FSMC_Bank2" is undefined
      FSMC_Bank2->PCR2 = tmppcr;
..\Lib\src\stm32f4xx_fsmc.c(429): error:  #20: identifier "FSMC_Bank3" is undefined
      FSMC_Bank3->PCR3 = tmppcr;
..\Lib\src\stm32f4xx_fsmc.c(481): error:  #20: identifier "FSMC_Bank2" is undefined
        FSMC_Bank2->PCR2 |= PCR_PBKEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(485): error:  #20: identifier "FSMC_Bank3" is undefined
        FSMC_Bank3->PCR3 |= PCR_PBKEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(493): error:  #20: identifier "FSMC_Bank2" is undefined
        FSMC_Bank2->PCR2 &= PCR_PBKEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(497): error:  #20: identifier "FSMC_Bank3" is undefined
        FSMC_Bank3->PCR3 &= PCR_PBKEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(521): error:  #20: identifier "FSMC_Bank2" is undefined
        FSMC_Bank2->PCR2 |= PCR_ECCEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(525): error:  #20: identifier "FSMC_Bank3" is undefined
        FSMC_Bank3->PCR3 |= PCR_ECCEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(533): error:  #20: identifier "FSMC_Bank2" is undefined
        FSMC_Bank2->PCR2 &= PCR_ECCEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(537): error:  #20: identifier "FSMC_Bank3" is undefined
        FSMC_Bank3->PCR3 &= PCR_ECCEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(557): error:  #20: identifier "FSMC_Bank2" is undefined
      eccval = FSMC_Bank2->ECCR2;
..\Lib\src\stm32f4xx_fsmc.c(562): error:  #20: identifier "FSMC_Bank3" is undefined
      eccval = FSMC_Bank3->ECCR3;
..\Lib\src\stm32f4xx_fsmc.c(617): error:  #20: identifier "FSMC_Bank4" is undefined
    FSMC_Bank4->PCR4 = 0x00000018;
..\Lib\src\stm32f4xx_fsmc.c(653): error:  #20: identifier "FSMC_Bank4" is undefined
    FSMC_Bank4->PCR4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_Waitfeature |
..\Lib\src\stm32f4xx_fsmc.c(716): error:  #20: identifier "FSMC_Bank4" is undefined
      FSMC_Bank4->PCR4 |= PCR_PBKEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(721): error:  #20: identifier "FSMC_Bank4" is undefined
      FSMC_Bank4->PCR4 &= PCR_PBKEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(767): error:  #20: identifier "FSMC_Bank2" is undefined
        FSMC_Bank2->SR2 |= FSMC_IT;
..\Lib\src\stm32f4xx_fsmc.c(772): error:  #20: identifier "FSMC_Bank3" is undefined
        FSMC_Bank3->SR3 |= FSMC_IT;
..\Lib\src\stm32f4xx_fsmc.c(777): error:  #20: identifier "FSMC_Bank4" is undefined
        FSMC_Bank4->SR4 |= FSMC_IT;   

如图可见是有一大堆的宏没有定义。

原因

stm32f4xx_fmc.c是在固件库中的一个外设,仅作用于 STM32F429_439xxSTM32F446xxSTM32F469_479xxSTM32F427_437xx系列的芯片,如果不是这些芯片的话将不会引用 stm32f4xx_fmc.h 这个头文件,也就产生了宏没有定义的问题。

具体的说,我们在Option for Target的C/C++选项卡的Define填写了当前所使用芯片的所属系列。
image.png

这造成了文件了error。

stm32f4xx_fsmc.c也是同理。

解决

在keil分组中将对应stm32f4xx_fmc.cstm32f4xx_fsmc.c移除分组就可以了
2024-10-30T10:02:28.png

猜你喜欢